       ID Division.
       Program-ID. A1903e.
       Environment Division.
      *Datendeklaration
       Data Division.
       01  person.
           02 persnr pic x(4).
           02 vname pic x(15).
           02 datum pic x(10).
           02 gebdat redefines datum.
               03 jahr pic 9999.
                   88 jahrok value 1900 thru 2000.
               03 strich1 pic x.
               03 mon pic 99.
                   88 mon31 value 1,3,5,7,8,10,12.
                   88 mon30 value 4,6,9,11.
                   88 mon28 value 2.
                   88 monok value 1 thru 12.
               03 strich2 pic x.
               03 tag pic 99.
           02 gehalt pic 9999999999V99 packed-decimal.
       01  datumflag pic 9 value 0.
           88 datumok value 1.
       01  erg pic 9(4).
       01  rest pic 9999.
      *Ausgabeformate
       01  gehalt-out pic z,zzz,zzz,zz9.99.
       Procedure division.
       main.
           perform eingabe
           perform ausgabe
           stop run.

       eingabe.
           move '-' to strich1
           move '-' to strich2
           perform with test after until persnr is numeric
           display 'Gib deine Personalnr ein: ' upon console
           accept persnr from console
           if persnr not numeric then
           display 'Persnr falsch!' upon console
           end-if
           end-perform
           perform with test after until vname not = Spaces
           display 'Gib deinen Vornamen ein: ' upon console
           accept vname from console
           if vname = Spaces then
           display 'Dein Vorname ist falsch!' upon console
           end-if
           end-perform
           perform datums with test after until datumok
           perform with test after until gehalt is numeric
           display 'Gib deine Gehalt ein: ' upon console
           accept gehalt from console
           if gehalt not numeric then
           display 'Dein Gehalt ist ungueltig' upon console
           end-if
           end-perform.

       ausgabe.
           move gehalt to gehalt-out
           display 'Deine Personalnr ist: ' persnr upon console
           display 'Dein Vorname ist: ' vname upon console
           display 'Dein Geburtsdatum ist: ' gebdat upon console
           display 'Dein Gehalt betraegt: ' gehalt-out upon console.

       datums.
           display 'Gib dein Gebjahr ein: ' upon console
           accept jahr from console
           if jahrok then
           display 'Gib dein Gebmonat ein: ' upon console
           accept mon from console
           if monok then
           display 'Gib dein Gebtag ein: ' upon console
           accept tag from console
           if mon31 then
           if tag > 0 and tag < 32 then
           add 1 to datumflag
           next sentence
           else
           display 'Dein Gebtag ist falsch!' upon console
           end-if
           else
           if mon30 then
           if tag > 0 and tag < 31 then
           add 1 to datumflag
           next sentence
           else
           display 'Dein Gebtag ist falsch!' upon console
           end-if
           else
           if mon28 then
           divide jahr by 4 giving erg remainder rest
           if rest = 0 then
           add 1 to datumflag
           divide jahr by 100 giving erg remainder rest
           if rest = 0 then
           move 0 to datumflag
           divide jahr by 400 giving erg remainder rest
           if rest = 0 then
           add 1 to datumflag
           next sentence
           end-if
           end-if
           end-if
           end-if
           end-if
           display 'Dein Gebtag ist falsch!' upon console
           next sentence
           end-if
           else
           display 'Dein Gebmonat ist falsch!' upon console
           end-if
           else
           display 'Dein Gebjahr ist falsch!' upon console
           end-if.
